L'instruction SQL INSERT INTO SELECT copie les données d'une table et les insère dans une autre table.
L'instruction INSERT INTO SELECT requiert que les types de données dans les tables source et cible correspondent.
Copie toutes les colonnes d'une table à une autre :
INSERT INTO table2
SELECT *
FROM table1
WHERE condition
Copie uniquement certaines colonnes d'une table à une autre :
INSERT INTO table2 (column1, column2, column3, ...)
SELECT column1, column2, column3, ...
FROM table1
WHERE condition
Dans ce tutoriel nous utiliserons la célèbre base de données exemple "Northwind".
Vous trouverez ci-dessous un exemple de la table "Customers" ("Clients") :
CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
---|---|---|---|---|---|---|
1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 5021 | Mexico |
3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 5023 | Mexico |
4 | Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK |
5 | Berglunds snabbköp | Christina Berglund | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
Et l'échantillon du tableau "Suppliers" ("Fournisseurs") :
SupplierID | SupplierName | ContactName | Address | City | PostalCode | Country | Phone |
---|---|---|---|---|---|---|---|
1 | Exotic Liquid | Charlotte Cooper | 49 Gilbert St. | Londona | EC1 4SD | UK | (171) 555-2222 |
2 | New Orleans Cajun Delights | Shelley Burke | P.O. Box 78934 | New Orleans | 70117 | USA | (100) 555-4822 |
3 | Grandma Kelly's Homestead | Regina Murphy | 707 Oxford Rd. | Ann Arbor | 48104 | USA | (313) 555-5735 |
4 | Tokyo Traders | Yoshi Nagase | 9-8 Sekimai Musashino-shi | Tokyo | 100 | Japan | (03) 3555-5011 |
5 | Cooperativa de Quesos 'Las Cabras' | Antonio del Valle Saavedra | Calle del Rosal 4 | Oviedo | 33007 | Spain | (98) 598 76 54 |
La requête SQL suivante copie "Suppliers" ("Fournisseurs") vers "Customers" ("Clients") (les colonnes qui ne sont pas remplies de données contiendront NULL) :
INSERT INTO Customers (CustomerName, City, Country)
SELECT SupplierName, City, Country
FROM Suppliers
Une autre version de la requête SQL copie les données de la table « Fournisseurs » vers « Clients » (remplit toutes les colonnes) :
INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode, Country)
SELECT SupplierName, ContactName, Address, City, PostalCode, Country
FROM Suppliers
L'instruction SQL suivante copie uniquement les fournisseurs allemands dans la table Customers :
INSERT INTO Customers (CustomerName, City, Country)
SELECT SupplierName, City, Country
FROM Suppliers
WHERE Country = 'Germany'